﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Telerik.Web.UI;
using System.Collections;
using Proxy;
using System.Web.Services;
using System.Text;
using SIM.Geo.UI.Clases;
using SIM.Util;

namespace SIM.Geo.UI.Geo
{
    public partial class frmAvanceLaborRegistro : PageBase
    {
        //List<AvanceDiarioSondajeResponse> listaAvanceLabor = new List<AvanceDiarioSondajeResponse>();
        List<DTOAvanceLaborResponse> listaDetalleLabor = new List<DTOAvanceLaborResponse>();


        #region SESSIONES
        private const string SESSION_LABOR = "AvanceLabor";
        private const string SESSION_LABOR_DETALLE = "DetalleAvanceLabor";

        #endregion

        protected void Page_Load(object sender, EventArgs e)
        {

            if (!IsPostBack)
            {


                Session.Remove(SESSION_LABOR_DETALLE);
                RecargarGrilla();

                string id = Request.Params["id"].ToString();
                string accion = Request.Params["acc"].ToString();
                string anio = Request.Params["an"].ToString();
                string mes = Request.Params["mes"].ToString();
                //string maq = Request.Params["maq"].ToString();

                this.hidCodigo.Value = id;
                this.hidAccion.Value = accion;
                this.hidAnio.Value = anio;
                this.hidMes.Value = mes;


                OcultarMensaje();

                #region CargarDetalle
                if (accion.CompareTo(enmAccionRealizar.Nuevo.GetHashCode().ToString()) == 0)
                {
                    MostrarDetalle(int.Parse(id), enmAccionRealizar.Nuevo);
                    this.txtCodigo.Text = GenerarCodigoAvance().ToString();
                }
                else if (accion.CompareTo(enmAccionRealizar.Edicion.GetHashCode().ToString()) == 0)
                {
                    this.txtCodigo.Text = this.hidCodigo.Value;
                    ObtenerCabecera();
                    MostrarDetalle(int.Parse(id), enmAccionRealizar.Edicion);

                }

                #endregion

                this.txtCodigo.Enabled = false;

            }
            if (this.hidCodigoLabor.Value.CompareTo(this.hidDato.Value) != 0)
            {
                if (hidOpcionEdit.Value != "1")
                {
                    hidCodigoLabor.Value = this.hidDato.Value;
                    CargarLabor();
                }
            }

        }

        private void CargarLabor()
        {
            try
            {
                using (SELaborClient proxyLabor = new SELaborClient("BasicHttpBinding_ISELabor"))
                {
                    var labor = proxyLabor.Obtener(int.Parse(this.hidCodigoLabor.Value.ToString()));
                    if (labor != null)
                    {
                        this.lblLabor.Text = labor.NombreLabor + " - " + labor.Cuadrante.ToString();
                        hidCodigoLabor.Value = labor.CodigoLabor.ToString();
                        hidDato.Value = labor.CodigoLabor.ToString();
                        searchBoxLabor.Text = labor.NombreLabor;

                        /*
                        using (var proxyCuerpo = new SECuerpoClient())
                        {
                            var objCuerpo = proxyCuerpo.ObtenerCuerpo(Convert.ToInt32(labor.CodigoCuerpo));
                            if (objCuerpo != null)
                            {
                                lblLabor.Text = String.Format("{0}     -     {1}", objCuerpo.Nombre, labor.Nivel);
                                hidCodigoLabor.Value = labor.CodigoLabor.ToString();
                                hidDato.Value = labor.CodigoLabor.ToString();
                                //lblLabor.Text = labor.NombreLabor;
                                searchBoxLabor.Text = labor.NombreLabor;
                            }
                        }
                         */
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.Error("Avance Labor Registro:CargarLabor", ex);
            }
        }
        void ObtenerCabecera()
        {

            using (SEAvanceLaborClient proxy = new SEAvanceLaborClient())
            {
                var avance = proxy.ObtenerAvanceLabor(Convert.ToInt32(this.txtCodigo.Text));
                if (avance != null)
                {

                    txtFechaIni.SelectedDate = avance.FechaInicio;
                    txtFechaFin.SelectedDate = avance.FechaFin;
                    txtSemana.Text = Convert.ToString(avance.Semana);
                    txtCodigo.Text = Convert.ToString(avance.CodigoAvanceLabor);

                    this.hidAnio.Value = Convert.ToString(avance.Anio);
                    this.hidMes.Value = avance.Mes;
                }
            }

        }


        private int GenerarCodigoAvance()
        {
            int codigoAvance = 0;
            try
            {
                using (SEAvanceLaborClient proxy = new SEAvanceLaborClient())
                {
                    codigoAvance = proxy.GenerarCodigoAvanceLabor(Convert.ToInt32(this.hidAnio.Value), this.hidMes.Value);
                }
            }
            catch (Exception ex)
            {

                Logger.Error("frmAvancePerforacionRegitro:GenerarCodigoAvance", ex);
            }
            return codigoAvance;

        }
        private void MostrarDetalle(int codigoAvanceLavor, enmAccionRealizar accionRealizar)
        {
            try
            {
                this.hidCodigo.Value = codigoAvanceLavor.ToString();
                if (accionRealizar == enmAccionRealizar.Edicion)
                {
                    //Carga detalla de pantalla en modo Edicion
                    this.CargarDatos(codigoAvanceLavor);
                    Habilitar(true);
                    //this.ddlMaquina.Enabled = false;
                    //this.txtSalida.Enabled = false;
                }
                else if (accionRealizar == enmAccionRealizar.Ver)
                {
                    //Carga detalla de pantalla en modo Consulta
                    this.CargarDatos(codigoAvanceLavor);
                    Habilitar(false);
                    //this.ddlMaquina.Enabled = false;
                    //this.txtSalida.Enabled = false;
                }
                else if (accionRealizar == enmAccionRealizar.Nuevo)
                {
                    //Carga detalla de pantalla en modo Nuevo
                    Limpiar();
                    Habilitar(true);
                }

                //this.ListarSondajes();
                //this.ListarConsumo();
                //this.ListarEntubacion();

                //OcultarMensaje();
                OcultarMensajeValidacion();

                //this.mpRegistro.Show();
            }
            catch (Exception ex)
            {

                Logger.Error("frmAvancePerforacionRegitro:MostrarDetalle", ex);
            }
        }


        private void CargarDatos(int codigoAvanceLabor)
        {
            try
            {
                using (var proxy = new SEAvanceLaborClient())
                {
                    var item = proxy.ObtenerAvanceLabor(codigoAvanceLabor);
                    if (item != null)
                    {
                        this.hidCodigo.Value = item.CodigoAvanceLabor.ToString();
                        this.txtCodigo.Text = item.CodigoAvanceLabor.ToString();


                        List<DTOAvanceLaborResponse> listaDetalleLabor = new List<DTOAvanceLaborResponse>();
                        loadDatos(codigoAvanceLabor, listaDetalleLabor);

                        Session[SESSION_LABOR_DETALLE] = listaDetalleLabor;

                        RecargarGrilla();
                    }
                }
            }
            catch (Exception ex)
            {

                Logger.Error("frmAvancePerforacionRegitro:CargarDatos", ex);
            }
        }

        private static void loadDatos(int codigoAvanceLabor, List<DTOAvanceLaborResponse> labores)
        {
            using (var proxyDeta = new SEDetalleAvanceLaborClient())
            {
                var detalleAvance = proxyDeta.ListarDetalleAvanceLabor(codigoAvanceLabor);
                foreach (var item in detalleAvance)
                {
                    DTOAvanceLaborResponse obj = new DTOAvanceLaborResponse();
                    obj.CodigoAvanceLabor = codigoAvanceLabor;
                    using (var proxyPuntoTopo = new SEPuntoTopograficoClient())
                    {
                        var dato = proxyPuntoTopo.ObtenerPuntoTopografico(item.CodigoPuntoTopograficoActual);
                        var dato2 = proxyPuntoTopo.ObtenerPuntoTopografico(item.CodigoPuntoTopograficoAnterior);
                        obj.CActual = dato.Nombre;
                        obj.CAnterior = dato2.Nombre;
                        obj.CodigoPuntoTopograficoActual = item.CodigoPuntoTopograficoActual;
                        obj.CodigoPuntoTopograficoAnterior = item.CodigoPuntoTopograficoAnterior;

                    }
                    using (var proxyLabor = new SELaborClient())
                    {
                        var objLabor = proxyLabor.Obtener(item.CodigoLabor);
                        obj.Labor = objLabor.NombreLabor;
                        obj.Nivel = objLabor.Nivel;
                        obj.CodigoLabor = item.CodigoLabor;
                        using (var proxyCuerpo = new SECuerpoClient())
                        {
                            obj.Cuerpo = "";
                            var objCuerpo = proxyCuerpo.ObtenerCuerpo(Convert.ToInt32(objLabor.CodigoCuerpo));
                            if (objCuerpo != null) obj.Cuerpo = objCuerpo.Nombre;
                        }

                    }
                    obj.CActual2 = Convert.ToString(item.ContraActual);
                    obj.CAnterior2 = Convert.ToString(item.ContraAnterior);
                    obj.Avance = Convert.ToDouble(item.Avance);
                    obj.Observacion = item.Observacion;

                    labores.Add(obj);
                }
            }
        }
        protected void ibtnAgregar_Click(object sender, ImageClickEventArgs e)
        {
            hidOpcionEdit.Value = "0";
            ibtnConsultar.Enabled = true;
            Limpiar();
            ddlPuntoCtrlActual.Enabled = true;
            ddlPuntoCtrlAnt.Enabled = true;
            searchBoxLabor.Enabled = true;
            loadDllPopUp();
            txtPCAnterior2.Text = "0";
            listaDetalleLabor = (List<DTOAvanceLaborResponse>)Session[SESSION_LABOR_DETALLE];
            if (listaDetalleLabor != null)
            {

                var objUltimo = listaDetalleLabor.Max(x => x.CActual2);
                if (objUltimo != null)
                {
                    txtPCAnterior2.Text = objUltimo;//.CActual2;
                }
            }

            OcultarMensajeValidacion();
            this.mpPerforacion.Show();
        }


        private void loadDllPopUp()
        {
            using (var proxyPuntoTopo = new SEPuntoTopograficoClient())
            {
                var datos = proxyPuntoTopo.ListarPuntoTopografico();

                ddlPuntoCtrlAnt.DataSource = datos;
                ddlPuntoCtrlAnt.DataTextField = "Nombre";
                ddlPuntoCtrlAnt.DataValueField = "CodigoPuntoTopografico";
                ddlPuntoCtrlAnt.DataBind();


                ddlPuntoCtrlActual.DataSource = datos;
                ddlPuntoCtrlActual.DataTextField = "Nombre";
                ddlPuntoCtrlActual.DataValueField = "CodigoPuntoTopografico";
                ddlPuntoCtrlActual.DataBind();



            }
        }
        protected void ibtnPrint_Click(object sender, ImageClickEventArgs e)
        {
            if (string.IsNullOrEmpty(this.txtCodigo.Text)) return;
            Response.Redirect("../Reportes/frmVisorAvanceLabor.aspx?cod=" + this.txtCodigo.Text);
        }
        protected void rgLista_ItemDataBound(object sender, GridItemEventArgs e)
        {
            try
            {
                //    if (e.Item.ItemType == GridItemType.Item || e.Item.ItemType == GridItemType.AlternatingItem)
                //    {
                //GridDataItem item = (GridDataItem)e.Item;
                //int codigoLabor = int.Parse(item.GetDataKeyValue("CodigoLabor").ToString());
                //int codPuntoTopoActual = int.Parse(item.GetDataKeyValue("CodigoPuntoTopograficoActual").ToString());
                //int codPuntoTopoAnterior = int.Parse(item.GetDataKeyValue("CodigoPuntoTopograficoAnterior").ToString());

                //Label lblLabor = (Label)item.FindControl("lblLabor");
                //Label lblCuerpo = (Label)item.FindControl("lblCuerpo");
                //Label lblNivel = (Label)item.FindControl("lblNivel");

                //Label lblPuntoAnterior= (Label)item.FindControl("lblPuntoAnterior");
                //Label lblPuntoActual = (Label)item.FindControl("lblPuntoActual");

                //if (lblPuntoAnterior != null && lblPuntoActual!=null) {

                //       using (var proxyPuntoTopo = new SEPuntoTopograficoClient())
                //        {
                //            var dato = proxyPuntoTopo.ObtenerPuntoTopografico(codPuntoTopoActual);
                //           if(dato!=null){
                //           lblPuntoActual.Text=dato.Nombre;
                //           }
                //       }
                //     using (var proxyPuntoTopo = new SEPuntoTopograficoClient())
                //        {
                //            var dato = proxyPuntoTopo.ObtenerPuntoTopografico(codPuntoTopoAnterior);
                //           if(dato!=null){
                //           lblPuntoAnterior.Text=dato.Nombre;
                //           }
                //       }

                //}


                //if (lblCuerpo != null)
                //{
                //    using (var proxyLabor = new SELaborClient())
                //    {
                //        var objLabor = proxyLabor.Obtener(codigoLabor);
                //        lblLabor.Text = objLabor.NombreLabor;
                //        lblNivel.Text = objLabor.Nivel;
                //        using (var proxyCuerpo = new SECuerpoClient())
                //        {
                //            var objCuerpo=proxyCuerpo.ObtenerCuerpo(Convert.ToInt32(objLabor.CodigoCuerpo));
                //            if (objCuerpo != null) lblCuerpo.Text = objCuerpo.Nombre;
                //        }

                //   }
                //}
                //   }
            }
            catch (Exception ex)
            {

                Logger.Error("frmDetalleAvanceLabor:rgLista_ItemDataBound", ex);
            }
        }

        protected override void Limpiar()
        {
            this.hidCodigo.Value = "0";
            txtObservacionNuevo.Text = string.Empty;
            txtAvanceMts.Text = string.Empty;
            txtPCActual2.Text = string.Empty;
            txtPCAnterior2.Text = string.Empty;
            hidCodigoLabor.Value = string.Empty;
            lblLabor.Text = string.Empty;
            searchBoxLabor.Text = string.Empty;
            OcultarMensaje();
            OcultarMensajeValidacion();
        }

        private void Habilitar(bool estado = true)
        {
            /// this.ddlGeologo.Enabled = estado;
            // this.txtFecha.Enabled = estado;


            this.ibtnGuardar.Visible = estado;
        }
        protected void searchBoxLabor_Search(object sender, SearchBoxEventArgs e)
        {
            this.searchBoxLabor.Text = string.Empty;
            this.hidDato.Value = "0";
            this.hidCodigoLabor.Value = "0";

            if (e.Value != null)
            {


                this.searchBoxLabor.Text = e.Text;

                this.hidDato.Value = e.Value;
                this.hidCodigoLabor.Value = e.Value;

                getLaborSeleccionada(Convert.ToInt32(e.Value));
            }
        }

        private void getLaborSeleccionada(int idLabor)
        {
            using (var proxyLabor = new SELaborClient())
            {
                var objLabor = proxyLabor.Obtener(idLabor);
                if (objLabor != null)
                {
                    if (hidOpcionEdit.Value == "1")
                    {
                        searchBoxLabor.Text = objLabor.NombreLabor;
                        this.lblLabor.Text = objLabor.NombreLabor + " - " + objLabor.Cuadrante.ToString();
                    }

                    /*
                    using (var proxyCuerpo = new SECuerpoClient())
                    {
                        var objCuerpo = proxyCuerpo.ObtenerCuerpo(Convert.ToInt32(objLabor.CodigoCuerpo));
                        if (objCuerpo != null) this.lblLabor.Text = String.Format("{0}     -     {1}", objCuerpo.Nombre, objLabor.Nivel);
                    }
                     */
                }
            }
        }
        [WebMethod]
        public static List<SearchBoxData> GetResults(SearchBoxContext context)
        {
            List<SearchBoxData> data = null;
            try
            {
                using (SELaborClient proxy = new SELaborClient("BasicHttpBinding_ISELabor"))
                {
                    var lista = proxy.Buscar(context.Text).ToList();
                    data = lista.Select(x => new SearchBoxData { Value = x.CodigoLabor.ToString(), Text = x.NombreLabor }).ToList();
                }


            }
            catch (Exception ex)
            {

                Logger.Error("Sondaje:GetResults", ex);
            }
            return data;
        }


        protected void ibtnCancelarRegLabor_Click(object sender, ImageClickEventArgs e)
        {
            this.OcultarMensaje();
            mpPerforacion.Hide();
        }

        protected void ibtnGuardarRegLabor_Click(object sender, ImageClickEventArgs e)
        {
            if (hidOpcionEdit.Value == "1")
            {
                listaDetalleLabor = (List<DTOAvanceLaborResponse>)Session[SESSION_LABOR_DETALLE];
                listaDetalleLabor.ForEach(x =>
                {
                    if (x.CodigoLabor == Convert.ToInt32(hidCodigoLabor.Value) &&
                          x.CodigoPuntoTopograficoActual == Convert.ToInt32(ddlPuntoCtrlActual.SelectedValue) &&
                          x.CodigoPuntoTopograficoAnterior == Convert.ToInt32(ddlPuntoCtrlAnt.SelectedValue))
                    {
                        x.Observacion = txtObservacionNuevo.Text;
                        x.CActual2 = Convert.ToString(txtPCActual2.Text);
                        x.CAnterior2 = Convert.ToString(txtPCAnterior2.Text);
                        x.Avance = Convert.ToDouble(txtAvanceMts.Text);

                    }
                });
                Session[SESSION_LABOR_DETALLE] = listaDetalleLabor;
                RecargarGrilla();



                this.MostrarMensajeValidacion(MSG_OK_GRABAR);
                this.mpPerforacion.Hide();

            }
            else
            {

                AddDetalle();

            }




        }
        private void RecargarGrilla()
        {
            listaDetalleLabor = (List<DTOAvanceLaborResponse>)Session[SESSION_LABOR_DETALLE];
            if (listaDetalleLabor == null) listaDetalleLabor = new List<DTOAvanceLaborResponse>();
            this.rgLista.DataSource = listaDetalleLabor.OrderBy(x => x.Orden);
            this.rgLista.VirtualItemCount = listaDetalleLabor.Count;
            this.rgLista.DataBind();
            txtTotalHoras.Text = Convert.ToString(listaDetalleLabor.Sum(X => X.Avance));
        }
        //private void RecargarGrilla2()
        //{
        //    string id = Request.Params["id"].ToString();
        //    this.CargarDatos(int.Parse(id));
        //}
        protected void AddDetalle()
        {
            try
            {
                //Se valida antes de grabar
                StringBuilder sb = new StringBuilder();
                if (!this.Validar(ref sb))
                {
                    this.MostrarMensajeValidacion(sb.ToString());
                    return;
                }

                listaDetalleLabor = (List<DTOAvanceLaborResponse>)Session[SESSION_LABOR_DETALLE];

                if (listaDetalleLabor == null) listaDetalleLabor = new List<DTOAvanceLaborResponse>();

                var flgExistePk = listaDetalleLabor.Where(x => x.CodigoLabor == Convert.ToInt32(hidCodigoLabor.Value) &&
                    x.CodigoPuntoTopograficoActual == Convert.ToInt32(ddlPuntoCtrlActual.SelectedValue) &&
                    x.CodigoPuntoTopograficoAnterior == Convert.ToInt32(ddlPuntoCtrlAnt.SelectedValue)).FirstOrDefault();

                if (flgExistePk == null)
                {

                    string[] dato = lblLabor.Text.Split('-');
                    string strCuerpo = "";
                    string strNivel = "";
                    if (dato.Length == 2)
                    {
                        strCuerpo = dato[0];
                        strNivel = dato[1];
                    }
                    listaDetalleLabor.Add(new DTOAvanceLaborResponse
                    {
                        CodigoAvanceLabor = Convert.ToInt32(txtCodigo.Text),
                        CodigoLabor = Convert.ToInt32(hidCodigoLabor.Value),
                        Observacion = txtObservacionNuevo.Text,
                        CodigoPuntoTopograficoActual = Convert.ToInt32(ddlPuntoCtrlActual.SelectedValue),
                        CodigoPuntoTopograficoAnterior = Convert.ToInt32(ddlPuntoCtrlAnt.SelectedValue),
                        CActual2 = Convert.ToDecimal(txtPCActual2.Text).ToString(),
                        CAnterior2 = Convert.ToDecimal(txtPCAnterior2.Text).ToString(),
                        Avance = Convert.ToDouble(txtAvanceMts.Text),
                        CActual = ddlPuntoCtrlActual.SelectedItem.Text,
                        CAnterior = ddlPuntoCtrlAnt.SelectedItem.Text,
                        Labor = searchBoxLabor.Text,
                        Cuerpo = strCuerpo,
                        Nivel = strNivel,
                        Orden = listaDetalleLabor.Count + 1
                    });
                    Session[SESSION_LABOR_DETALLE] = listaDetalleLabor;
                    RecargarGrilla();
                }
                else
                {
                    this.MostrarMensajeValidacion("Ya existe el codigo de Labor,Codigo Punto Topografico Anterior y Codigo Punto Topografico Actual en la lista. ");
                    return;
                }


                this.MostrarMensajeValidacion(MSG_OK_GRABAR);
                this.mpPerforacion.Hide();


            }
            catch (Exception ex)
            {
                MostrarMensajeValidacion(MSG_ERROR_GRABAR);//, enmTipoMensajeMostrar.Error);
                Logger.Error("Avance Labor :Guardar", ex);
            }
        }
        #region Mensajes

        protected override void MostrarMensaje(string mensaje, enmTipoMensajeMostrar tipoMensaje = enmTipoMensajeMostrar.Informativa)
        {
            this.pnlMensajeValidacion.Visible = true;
            this.lblMensajeValidacion.Text = mensaje;
            this.pnlMensajeValidacion.CssClass = this.ObtenerEstiloMensaje(tipoMensaje);
        }

        protected override void OcultarMensaje()
        {
            this.pnlMensajeValidacion.Visible = false;
            this.lblMensajeValidacion.Text = string.Empty;
        }

        protected override void MostrarMensajeValidacion(string mensaje)
        {

            this.pnlMensajePerforacion.Visible = true;
            this.lblMensajePerforacion.Text = mensaje;

        }

        protected override void OcultarMensajeValidacion()
        {
            this.pnlMensajePerforacion.Visible = false;
            this.lblMensajePerforacion.Text = string.Empty;


        }


        #endregion

        private void editarItemDetalle(GridEditableItem item)
        {
            int codigoAvanceLabor = int.Parse(item.GetDataKeyValue("CodigoAvanceLabor").ToString());
            int codigoLabor = int.Parse(item.GetDataKeyValue("CodigoLabor").ToString());
            int codigoTopoActual = int.Parse(item.GetDataKeyValue("CodigoPuntoTopograficoActual").ToString());
            int codigoTopoAnterior = int.Parse(item.GetDataKeyValue("CodigoPuntoTopograficoAnterior").ToString());

            loadDllPopUp();
            listaDetalleLabor = (List<DTOAvanceLaborResponse>)Session[SESSION_LABOR_DETALLE];
            var objItemEdit = listaDetalleLabor.Where(x => x.CodigoAvanceLabor == codigoAvanceLabor &&
                                                     x.CodigoLabor == codigoLabor &&
                                                     x.CodigoPuntoTopograficoActual == codigoTopoActual &&
                                                     x.CodigoPuntoTopograficoAnterior == codigoTopoAnterior).FirstOrDefault();

            if (objItemEdit != null)
            {
                hidOpcionEdit.Value = "1";
                txtObservacionNuevo.Text = objItemEdit.Observacion;
                txtAvanceMts.Text = Convert.ToString(objItemEdit.Avance);
                //txtPCActual2.Text = Convert.ToString(objItemEdit.ContraActual);
                //txtPCAnterior2.Text = Convert.ToString(objItemEdit.ContraAnterior);
                txtPCActual2.Text = Convert.ToString(objItemEdit.CActual2);
                txtPCAnterior2.Text = Convert.ToString(objItemEdit.CAnterior2);

                if (ddlPuntoCtrlActual.Items.FindByValue(Convert.ToString(objItemEdit.CodigoPuntoTopograficoActual)) != null)
                {
                    ddlPuntoCtrlActual.Items.FindByValue(Convert.ToString(objItemEdit.CodigoPuntoTopograficoActual)).Selected = true;
                }
                if (ddlPuntoCtrlAnt.Items.FindByValue(Convert.ToString(objItemEdit.CodigoPuntoTopograficoAnterior)) != null)
                {
                    ddlPuntoCtrlAnt.Items.FindByValue(Convert.ToString(objItemEdit.CodigoPuntoTopograficoAnterior)).Selected = true;
                }

                hidCodigoLabor.Value = Convert.ToString(objItemEdit.CodigoLabor);
                this.hidDato.Value = Convert.ToString(objItemEdit.CodigoLabor);

                getLaborSeleccionada(objItemEdit.CodigoLabor);
                ibtnConsultar.Enabled = false;

                ddlPuntoCtrlActual.Enabled = false;
                ddlPuntoCtrlAnt.Enabled = false;
                searchBoxLabor.Enabled = false;


                OcultarMensajeValidacion();
                mpPerforacion.Show();
            }
            else
            {

                MostrarMensaje("No se pudo obtener el registro a editar.", enmTipoMensajeMostrar.Error);
            }

        }
        private void eliminarItemDetalle(GridEditableItem item)
        {
            int codigoAvanceLabor = int.Parse(item.GetDataKeyValue("CodigoAvanceLabor").ToString());
            int codigoLabor = int.Parse(item.GetDataKeyValue("CodigoLabor").ToString());
            int codigoTopoActual = int.Parse(item.GetDataKeyValue("CodigoPuntoTopograficoActual").ToString());
            int codigoTopoAnterior = int.Parse(item.GetDataKeyValue("CodigoPuntoTopograficoAnterior").ToString());
            listaDetalleLabor = (List<DTOAvanceLaborResponse>)Session[SESSION_LABOR_DETALLE];
            var objItemDel = listaDetalleLabor.Where(x => x.CodigoAvanceLabor == codigoAvanceLabor &&
                                                     x.CodigoLabor == codigoLabor &&
                                                     x.CodigoPuntoTopograficoActual == codigoTopoActual &&
                                                     x.CodigoPuntoTopograficoAnterior == codigoTopoAnterior).FirstOrDefault();
            if (objItemDel != null)
            {
                listaDetalleLabor.Remove(objItemDel);
                Session[SESSION_LABOR_DETALLE] = listaDetalleLabor;
                RecargarGrilla();
            }
            else
            {

                MostrarMensaje("No se pudo obtener el registro a editar.", enmTipoMensajeMostrar.Error);
            }

        }
        protected void rgLista_ItemCommand(object sender, GridCommandEventArgs e)
        {
            if (e.CommandName.CompareTo("Editar") == 0)
            {
                var item = (GridEditableItem)e.Item;
                editarItemDetalle(item);
            }
            if (e.CommandName.CompareTo("Delete") == 0)
            {
                var item = (GridEditableItem)e.Item;
                eliminarItemDetalle(item);
            }

            //if (e.CommandName.CompareTo("Ver") == 0)
            //{
            //    //Ver solo lectura
            //    var item = (GridEditableItem)e.Item;
            //    int codigoAvanceDiario = int.Parse(item.GetDataKeyValue("CodigoAvanceDiario").ToString());
            //    //MostrarDetalle(codigoAvanceDiario, enmAccionRealizar.Ver);
            //}

            if (e.CommandName == RadGrid.FilterCommandName)
            {
                RecargarGrilla();
            }

        }


        protected override bool Validar(ref  StringBuilder sb)
        {
            bool retorno = true;
            try
            {
                if (String.IsNullOrEmpty(hidCodigoLabor.Value) || hidCodigoLabor.Value.CompareTo("0") == 0)
                {
                    sb.AppendLine("Busque y Seleccione una labor.");
                    retorno = false;
                }
                if (retorno && Convert.ToDecimal(txtAvanceMts.Text) <= 0)
                {
                    sb.AppendLine("Avance Labor no puede ser menor a 1 mt.");
                    retorno = false;

                }




            }
            catch (Exception ex)
            {
                retorno = false;
                Logger.Error("Avance Labor Registro:Validar", ex);
            }
            return retorno;
        }

        protected void ibtnGuardar_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                using (SEAvanceLaborClient proxy = new SEAvanceLaborClient())
                {

                    listaDetalleLabor = ((List<DTOAvanceLaborResponse>)Session[SESSION_LABOR_DETALLE]);
                    if (listaDetalleLabor == null || listaDetalleLabor.Count == 0)
                    {
                        MostrarMensaje("Agregue detalle de labor", enmTipoMensajeMostrar.Error);
                        return;
                    }

                    AvanceLabor obj = new AvanceLabor();
                    obj.CodigoAvanceLabor = Convert.ToInt32(txtCodigo.Text);
                    obj.Anio = Convert.ToInt32(hidAnio.Value);
                    obj.Mes = hidMes.Value;
                    obj.FechaInicio = txtFechaIni.SelectedDate.Value;
                    obj.FechaFin = txtFechaFin.SelectedDate.Value;
                    obj.Semana = Convert.ToInt32(txtSemana.Text);
                    //obj.DetalleAvanceLabor = listaDetalleLabor.ToArray();
                    obj.AvanceTotal = Convert.ToDecimal(txtTotalHoras.Text);


                    List<DetalleAvanceLabor> detalle = new List<DetalleAvanceLabor>();

                    foreach (var item in listaDetalleLabor)
                    {
                        detalle.Add(new DetalleAvanceLabor
                        {
                            CodigoLabor = item.CodigoLabor,
                            CodigoAvanceLabor = item.CodigoAvanceLabor,
                            CodigoPuntoTopograficoActual = item.CodigoPuntoTopograficoActual,
                            CodigoPuntoTopograficoAnterior = item.CodigoPuntoTopograficoAnterior,
                            Avance = Convert.ToDecimal(item.Avance),
                            Observacion = item.Observacion,
                            Orden = detalle.Count + 1,
                            ContraActual = Convert.ToDecimal(item.CActual2),
                            ContraAnterior = Convert.ToDecimal(item.CAnterior2)
                        });
                    }
                    obj.DetalleAvanceLabor = detalle.ToArray();


                    if (hidCodigo.Value == "0")
                    {
                        var idgenerado = proxy.InsertarAvanceLabor(obj); ;
                        hidCodigo.Value = idgenerado.ToString();

                        this.txtCodigo.Text = this.hidCodigo.Value;
                        ObtenerCabecera();
                        MostrarDetalle(idgenerado, enmAccionRealizar.Edicion);

                        MostrarMensaje(MSG_OK_GENERICO, enmTipoMensajeMostrar.Informativa);
                    }
                    else
                    {
                        proxy.ModificarAvanceLabor(obj);
                        MostrarMensaje(MSG_OK_GENERICO, enmTipoMensajeMostrar.Informativa);
                    }
                }

                Session.Remove(SESSION_LABOR_DETALLE);
                Response.Redirect("frmAvanceLabor.aspx", false);
            }
            catch (Exception ex)
            {
                MostrarMensaje(MSG_ERROR_GENERICO, enmTipoMensajeMostrar.Error);
                Logger.Error("Avance Labor Guardar ", ex);
            }


        }

        protected void ibtnCancelar_Click(object sender, ImageClickEventArgs e)
        {
            Session.Remove(SESSION_LABOR_DETALLE);
            //Solo debe volver a la pantalla anterior de la lista
            Response.Redirect("frmAvanceLabor.aspx", false);

            /*
            RecargarGrilla();
            txtFechaFin.SelectedDate = null;// string.Empty;
            txtFechaIni.SelectedDate = null;// string.Empty;
            txtSemana.Text = "";
            txtTotalHoras.Text = "0";
            OcultarMensaje();
            if (this.hidCodigo.Value.CompareTo("0") != 0)
            {
                this.txtCodigo.Text = this.hidCodigo.Value;
                ObtenerCabecera();
                MostrarDetalle(Convert.ToInt32(hidCodigo.Value), enmAccionRealizar.Edicion);
            }
            */
        }

        protected void ibtnExportar_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                RecargarGrilla();
                this.rgLista.ExportSettings.Excel.Format = (GridExcelExportFormat)Enum.Parse(typeof(GridExcelExportFormat), "ExcelML");
                this.rgLista.ExportSettings.IgnorePaging = true;
                this.rgLista.ExportSettings.ExportOnlyData = true;
                this.rgLista.ExportSettings.OpenInNewWindow = true;
                this.rgLista.MasterTableView.ExportToExcel();
            }
            catch (Exception ex)
            {

                Logger.Error("frmAvanceLaborRegistro:ibtnExportar_Click", ex);
            }
        }



        protected void rgLista_PageSizeChanged(object sender, GridPageSizeChangedEventArgs e)
        {
            //rgLista.CurrentPageIndex = e.NewPageIndex;
            RecargarGrilla();
        }
        protected void rgLista_PageIndexChanged(object sender, GridPageChangedEventArgs e)
        {
            rgLista.CurrentPageIndex = e.NewPageIndex;

            RecargarGrilla();
            rgLista.Rebind();
        }

        protected void rgLista_SortCommand(object sender, GridSortCommandEventArgs e)
        {
            RecargarGrilla();
        }



    }
}